package com.jcfk.system.service;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jcfk.common.business.service.BaseService;
import com.jcfk.common.core.utils.BeanUtils;
import com.jcfk.common.security.utils.SecurityUtils;
import com.jcfk.common.web.domain.DataPage;
import com.jcfk.system.dao.SysInternalMessageTypeDao;
import com.jcfk.system.domain.dto.SysInternalMessageTypeDTO;
import com.jcfk.system.domain.po.SysInternalMessageType;
import com.jcfk.system.domain.query.SysMessageTypeQuery;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;

/**
 * 消息雷霆
 */
@Service
public class SysInternalMessageTypeService extends BaseService<SysInternalMessageTypeDao, SysInternalMessageType> {
    /**
     * 获取消息列表
     *
     * @param query
     * @return
     */
    public DataPage<SysInternalMessageTypeDTO> queryManagePage(DataPage<SysInternalMessageTypeDTO> page, SysMessageTypeQuery query) {
        return baseMapper.queryByPage(page, query);
    }


    /**
     * 添加权限
     *
     * @param dto
     * @return
     */
    public SysInternalMessageTypeDTO insert(SysInternalMessageTypeDTO dto) {

        this.setDefaultValue(dto);
        // 实体
        SysInternalMessageType notice = new SysInternalMessageType();
        BeanUtils.copyProperties(dto, notice);

        this.save(notice);
        BeanUtils.copyProperties(notice, dto);

        return dto;
    }

    /**
     * 修改权限
     *
     * @param dto
     * @return
     */
    public SysInternalMessageTypeDTO update(SysInternalMessageTypeDTO dto) {
        this.setDefaultValue(dto);
        // 实体
        SysInternalMessageType notice = new SysInternalMessageType();
        BeanUtils.copyProperties(dto, notice);

        this.updateById(notice);
        BeanUtils.copyProperties(notice, dto);

        return dto;
    }

    /**
     * 根据主键删除消息类型(逻辑删除)
     *
     * @param dto
     * @return bool
     */
    @Transactional(rollbackFor = Exception.class)
    public Boolean logicDelete(SysInternalMessageTypeDTO dto) {
        // 保存
        QueryWrapper<SysInternalMessageType> uw = new QueryWrapper<>();
        uw.eq("id", dto.getIds());
        SysInternalMessageType item = new SysInternalMessageType();
        item.setDeleted(1);
        item.setVersion(dto.getVersion());
        int count = this.baseMapper.update(item, uw);

        return count >= 0 ? true : false;
    }

    /**
     * 根据主键删除消息类型(逻辑删除)
     *
     * @param dto
     * @return bool
     */
    @Transactional(rollbackFor = Exception.class)
    public Boolean logicDeleteList(SysInternalMessageTypeDTO dto) {
        // 保存
        QueryWrapper<SysInternalMessageType> uw = new QueryWrapper<>();
        uw.in("id", dto.getIds());
        SysInternalMessageType item = new SysInternalMessageType();
        item.setDeleted(1);
        item.setVersion(dto.getVersion());
        int count = this.baseMapper.update(item, uw);

        return count >= 0 ? true : false;
    }


    /**
     * 设置添加默认值
     *
     * @param dto 添加对象
     */
    public void setDefaultValue(SysInternalMessageTypeDTO dto) {
        if (StrUtil.isEmpty(dto.getCreatedUserId())) {
            dto.setCreatedUserId(SecurityUtils.getUserId());
            dto.setCreatedUserName(SecurityUtils.getUserName());
            dto.setCreateTime(new Date());
        }
        dto.setLastUpdatedUserId(SecurityUtils.getUserId());
        dto.setLastUpdateTime(new Date());
        dto.setLastUpdatedUserName(SecurityUtils.getUserName());
        dto.setDeleted(0);
    }


    /**
     * 根据主键获取消息类型信息
     *
     * @param id 主键
     * @return StandardCodeDTO
     */
    public SysInternalMessageTypeDTO get(String id) {
        // 查询数据
        SysInternalMessageType item = this.baseMapper.selectById(id);
        SysInternalMessageTypeDTO dto = new SysInternalMessageTypeDTO();
        try {
            BeanUtils.copyProperties(item, dto);
        } catch (RuntimeException e) {
            throw e;
        }
        return dto;
    }
}
